home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 1996 April
/
CHIP 1996 aprilis (CD06).zip
/
CHIP_CD06.ISO
/
hypertxt.arj
/
9509
/
REXX.CD
< prev
next >
Wrap
Text File
|
1996-03-02
|
7KB
|
123 lines
@VIBM PC DOS 7 Rexx@N
@VA batchek királya@N
A DOS batch file-jai (.BAT) viszonylag kevéssé
programozhatók, néha valóságos mûvészet például egy
telepítôprogramot batchben elkészíteni. Jellemzô probléma
például az, hogy nem tudjuk lekérdezni a szabad
lemezkapacitást.
Az ilyen és hasonló problémák leküzdésére sok kiegészítô
megoldás (4DOS, Norton Batch Enhancer stb.) született, közös
tulajdonságuk az, hogy egymással nem kompatibilisek, és
külön kell beszerezni ôket.
Az IBM-nek már korábban volt egy fejlettebb script
rendszere, a Rexx (REstructured eXtended eXecutor language),
de csak nagyobb rendszereken volt elérhetô. A PC DOS 7-tel a
Rexx immár bekerült a DOS-világba is.
A Rexx leginkább a Unix shell scriptekhez hasonló
képzôdmény: kisebb-nagyobb önálló -- akár interaktív --
programok is írhatók benne, de meglévô programjaink batchbe
építését is támogatja.
Vannak változói, aritmetikai és stringkezelô utasításai,
feltételes vezérlésátadó és ciklusszervezô utasításai --
azaz ""rendes" programozási nyelv, alaposan túllép a DOS
hagyományos batcheinek programozhatóságán. Utasításkészlete
elsôsorban rendszervezérlési célokra készült, azaz a külsô
programokkal való lehetô legjobb ötvözhetôségére törekedtek
a fejlesztôk.
A Rexxnek több megvalósítása is létezik (OS/2 Rexx,
Watcom Visual Rexx, van Novell NLM-ként is stb.), ezek alap
utasításkészlete azonos, természetesen az adott operációs
rendszerhez szorosan kötôdô utasításaik is vannak. Ezért ne
várja el senki, hogy például a DOS-os verzió végrehajtsa az
OS/2-es Rexx multitask-kezelô parancsait.
@VA nyelv szerkezete@N
A Rexx interpretált nyelv, vagyis az eredeti Basic
nyelvhez hasonlóan a forráskód lefordítása és a lefordított
kód futtatása helyett az utasítássorokat futás közben
egyenként hajtja végre a Rexx interpreter. A Basicek
többségével ellentétben itt semmiféle elôfeldolgozás
(tokenizálás, elsôdleges szintaktikai ellenôrzés) nem
történik, maga a forrásszöveg (script) hajtódik végre, akár
csak a Unix shell scriptek vagy a DOS .BAT file-ok esetén.
Az utasítássorok szerkezete egyszerû, aki már ismer
valamilyen magasszintû nyelvet (Basic, C, Pascal stb.), az
szinte azonnal tud Rexx scriptet is írni, a DOS-os
batchekben járatosak sem fognak sokáig ügyetlenkedni.
Az sorok utasításszóból és ha kell, az utána következô
paraméterekbôl állnak, illetve, ha szükséges, az elsô
utasítást címke (@Knév:@N) elôzheti meg. Egy sorban több
utasítás is lehet, pontosvesszôvel elválasztva. Mivel a
feldolgozás soronként történik, a sorvégi pontosvesszô
elhagyható.
A Rexxnek szöveges változói vannak, ezekkel string- és
aritmetikai mûveleteket is tud végezni. Tömböket és
összetettebb adatszerkezeteket nem ismer. Az egyetlen
bonyolultabb adatszerkezet a Rexx saját verme. Ennek
tetejére a @KPUSH adat@N utasítással pakolhatunk, onnan a @KPULL
@Kadat@N-tal vehetünk le értéket. E verem segítségével könnyûvé
válik a könyvtárak közötti navigálás: egy PUSH paranccsal
elmentjük az aktuális könyvtár nevét, utána más könyvtárba
átlépve könnyen visszatalálhatunk a kiindulási helyre,
hiszen az eredeti könyvtárnév visszanyerhetô a verembôl.
Bár valódi tömböket nem használ a Rexx, azok makrózással
szimulálhatók. A
@KZ.1 = 23
@KZ.2 = 'ez egy string'
@KIDX = 2
@KDAT = 4
@KSAY Z.IDX@N
program az ""ez egy string" üzenetet fogja kiírni a
képernyôre, viszont a @KSAY Z.DAT@N a ""Z.DAT" szöveget fogja
megjeleníteni, mert nincs Z.DAT változó.
@VRutinok: függvények és eljárások@N
A Rexx alaputasításait sok belsô függvény egészíti ki,
ezek nagy része stringkezelô: összehasonlítás, keresés,
rész-stringek kiemelése, szóközöket tartalmazó stringek
szavakra bontása stb. A maradék függvénykészlet aritmetikai
(ABS, SIGN stb.), rendszerinformációs (TIME, DATE stb.) és
I/O utasításokra oszlik.
A cikk elején említett problémát, azaz, hogy mekkora
szabad hely van a merevlemezen, az alábbi módon oldhatjuk
fel: végrehajtatunk egy @K'DIR >DIR.TXT'@N parancsot, majd a
létrejött DIR.TXT file-ból a @Ksor = LINEIN(DIR.TXT)@N
utasítással egyenként a @Ksor@N változóba olvashatjuk a sorokat,
köztük a szabad helyet megadót is. Innen a stringkezelô
függvényekkel már könnyen kinyerhetô a kért adat. (A DIR...
parancsot azért kell aposztrófok közé tenni, hogy a Rexx
tudja, hogy ez külsô parancs.)
A belsô függvények mellett saját eljárások is írhatók, a
@Kcímke: PROCEDURE ... RETURN@N parancsok közé ékelt
szubrutinban lokális változók is használhatók.
Belsô parancsok is készíthetôk, ezek lehetnek újabb REXX
scriptek, vagy bináris REXX programok is, (DOS alatt .COM
vagy .EXE file-ok), .RX kiterjesztésre átnevezve. Ezek egy
speciális interface használatával maguk is közvetlenül
elérhetik a REXX változóterületét, használhatják,
módosíthatják azt. A dokumentációban részletesen leírták a
Rexx programinterface használatát.
@VA Rexx DOS alatt@N
DOS alatt a parancsfile-okat a REXX.EXE program hajtja
végre. Azért, hogy ne kelljen beírni minden Rexx programnév
elé a végrehajtó programot is (@KRexx file-név@N), a PC DOS 7
készítôi egyszerûsítettek a dolgon: a COMMAND.COM minden
.BAT file végrehajtásakor megnézi, hogy az Rexx
magyarázósorral (/* .... */) kezdôdik-e, és ha igen, akkor
végrehajtás helyett átadja azt a REXX.EXE-nek.
Bár Rexx elég egyszerû nyelv, hatékony script file-ok
írhatók benne. Azon csodálkozom egy kicsit, hogy az IBM-nek
csak most jutott eszébe DOS alá is megcsinálni.
@KBata László@N
@<9509\REXX.GIF>■■@N Egy kisebb példaprogram a Rexx hypertext leírásában